package org.example.demo.mapper;

import org.apache.ibatis.annotations.Param;
import org.example.demo.model.SysUser;

import java.util.List;
import java.util.Map;

/**
 * @author fangyu
 * @version v1.0.0
 * @date 2020/9/22 6:44 下午
 */
public interface SysUserMapper {
    /**
     * 获取所有的用户以及对应的所有角色
     *
     * @return List<SysUser>
     */
    List<SysUser> selectAllUserAndRoles();

    /**
     * MyBatis 高级查询 => 一对多查询 -> collection 集合的嵌套查询
     * 通过嵌套查询获取指定用户的信息以及用户的角色和权限信息
     *
     * @param id 用户id
     * @return SysUser
     */
    SysUser selectAllUserAndRolesSelect(Long id);

    /**
     * MyBatis 高级查询 => 存储过程 -> 使用存储过程查询用户信息
     * @param user 用户
     */
    void selectUserById(SysUser user);

    /**
     * MyBatis 高级查询 => 存储过程 -> 使用存储过程分页查询
     * @param params (userName,pageNum,pageSize,total)
     * @return List<SysUser>
     */
    List<SysUser> selectUserPage(Map<String, Object> params);

    /**
     * MyBatis 高级查询 => 存储过程 -> 使用存储过程保存用户信息和角色关联信息
     * @param user
     * @param roleIds
     * @return
     */
    int insertUserAndRoles(@Param("user") SysUser user, @Param("roleIds")String roleIds);

    /**
     * MyBatis 高级查询 => 存储过程 -> 使用存储过程删除用户及角色信息
     * @param id
     * @return
     */
    int deleteUserById(Long id);
}